"""
@author: wangzhongren
@file: 基础练习 7-15.py
@time: 2023/12/9 16:54
"""

# 7、定义一个字典，value都为整数类型。输出字典中value的最大值以及它的key，输出字典中value的平均值
# 定义一个字典，key为字符串类型，value为整数类型
my_dict = {"A": 10, "B": 20, "C": 30, "D": 40}

# 初始化最大值为负无穷大
max_value = float("-inf")
# 初始化平均值为0
avg_value = 0

# 遍历字典中的每一个键值对
for key, value in my_dict.items():
    # 更新最大值，如果当前值大于最大值
    if value > max_value:
        max_value = value

    # 累加所有值，用于计算平均值
    avg_value += value

# 计算平均值
avg_value /= len(my_dict)

# 输出最大值和对应的键
print("最大值的键：", [key for key, value in my_dict.items() if value == max_value])
print("最大值：", max_value)

# 输出平均值
print("平均值：", avg_value)



# 8、请给出随机数，范围分别在（0-1）,(1-10), (1000-2000)
import random  # 导入random模块，用于生成随机数

# 生成范围在(0, 1)的随机数
random_num1 = random.random()
print("随机数范围在(0, 1):", random_num1)

# 生成范围在(1, 10)的随机整数
random_num2 = random.randint(1, 10)
print("随机整数范围在(1, 10):", random_num2)

# 生成范围在(1000, 2000)的随机浮点数
random_num3 = random.randint(1000, 2000)
print("随机浮点数范围在(1000, 2000):", random_num3)



# 9、输出八天前的日期时间，格式为 "2023-12-07 12:00:00"
import datetime

# 获取当前日期时间
current_datetime = datetime.datetime.now()

# 计算八天前的日期时间
eight_days_ago = current_datetime - datetime.timedelta(days=8)

# 格式化日期时间为指定格式
formatted_datetime = eight_days_ago.strftime("%Y-%m-%d %H:%M:%S")

# 输出结果
print(formatted_datetime)



# 10、编写python脚本，判断文件是否存在，如果存在写入内容“hello world”。判断文件路径从命令行输入。
#    例如：python  check_file.py  -f /etc/hostname
#    check_file.py 为自定义模块  -f 为指定路径参数（可以随便指定）



# 11、使用python读取/etc/ssh/sshd_config文件，读取它的前5行
#    过滤掉以#号开头的行和空行输出



# 12、python中模块查找的顺序

# 1. 当前目录：Python首先在当前脚本所在的目录中查找需要引用的模块，如果找到了同名的模块，则直接使用。
#
# 2. 内置模块：如果在当前目录中没有找到需要引用的模块，Python会接着在内置的模块中查找。内置模块是Python标准库中自带的一些模块，如`math`、`random`等。
#
# 3. sys.path路径：如果在内置模块中也没有找到需要引用的模块，Python会到指定的路径中查找。Python会在环境变量`sys.path`中定义的路径中按顺序查找模块。`sys.path`包括以下几个位置：
#    - 系统默认安装路径中的标准库目录
#    - 环境变量PYTHONPATH中指定的路径
#    - 在运行时添加的自定义路径
#
# 注意：在sys.path中搜索模块时，按照顺序依次在路径中查找，如果找到了同名的模块，则直接使用，后面的路径将被忽略。
#
# 4. 第三方模块：如果在sys.path路径中也没有找到需要引用的模块，Python会接着在第三方库中查找。第三方库是由其他开发者开发并共享的模块，如`numpy`、`pandas`等。需要使用pip安装第三方库，并将其安装路径添加到sys.path中。
#
# 如果在以上步骤中都没有找到需要引用的模块，Python会抛出`ModuleNotFoundError`异常。


# 13、使用python实现快速排序
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]  # 选择中间的元素作为基准值
    lesser, equal, greater = [], [], []
    for num in arr:
        if num < pivot:
            lesser.append(num)
        elif num == pivot:
            equal.append(num)
        else:
            greater.append(num)
    return quick_sort(lesser) + equal + quick_sort(greater)

# 从键盘读取输入的数组
arr = input("请输入待排序的数组（用空格分隔）：")
arr = list(map(int, arr.split()))

# 调用快速排序函数
sorted_arr = quick_sort(arr)

# 输出排序后的结果
print("排序后的数组：", sorted_arr)



# 14、使用python实现5行5列的盘龙数组
# 创建一个5行5列的空列表，用于存储盘龙数组
dragon_array = []

# 生成第一行
row1 = [1] * 5
dragon_array.append(row1)  # 将第一行添加到盘龙数组中

# 生成第二行
row2 = [2] * 5
row2[0] = 1  # 将第一个元素修改为1
dragon_array.append(row2)  # 将第二行添加到盘龙数组中

# 生成第三行
row3 = [3] * 5
row3[0] = 2  # 将第一个元素修改为2
row3[4] = 2  # 将最后一个元素修改为2
dragon_array.append(row3)  # 将第三行添加到盘龙数组中

# 生成第四行
row4 = [4] * 5
row4[0] = 3  # 将第一个元素修改为3
row4[3] = 3  # 将第四个元素修改为3
row4[4] = 3  # 将最后一个元素修改为3
dragon_array.append(row4)  # 将第四行添加到盘龙数组中

# 生成第五行
row5 = [5] * 5
row5[0] = 4  # 将第一个元素修改为4
row5[2] = 4  # 将第三个元素修改为4
row5[3] = 4  # 将第四个元素修改为4
row5[4] = 4  # 将最后一个元素修改为4
dragon_array.append(row5)  # 将第五行添加到盘龙数组中

# 打印盘龙数组
for row in dragon_array:
    print(row)



# 15、有一个n阶台阶，一个人可以一次走一步或者走两步，问要想走上去有多少种方式？
# 从键盘读取输入的n阶台阶数
n = int(input("请输入台阶数："))

# 创建一个空的列表，用于存储计算过程中每一阶台阶的走法总数
ways = [0] * (n + 1)

# 如果台阶数为0或1，直接返回台阶数，因为只有一种走法
if n == 0 or n == 1:
    print("走法总数为:", n)
else:
    # 初始化第一阶和第二阶的走法总数为1
    ways[1] = 1
    ways[2] = 1

    # 计算每一阶台阶的走法总数
    for i in range(3, n + 1):
        # 每一阶台阶的走法总数等于前两阶台阶的走法总数之和
        ways[i] = ways[i - 1] + ways[i - 2]

    print("走法总数为:", ways[n])

